﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Diagnostics;

namespace Rebides
{   
    /// <summary>
    /// Descrição: Classe principal da aplicação Rebides C#
    /// Funcionalidade:
    ///     Cria uma BD SQLite 3;
    ///     Converter dados csv para uma BD SQLite3;
    ///     Fazer listagens específicas;
    /// Data: 22/01/12
    /// Autor: Luís Costa Nº 6032
    /// </summary>
    class Main
    {
        //Constantes
        //---------------------------
        const string REBIDES_FILE_NAME = "reb";

        //Objetos da classe
        //---------------------------
        private DataBase db = new DataBase();
        private ProcessCSV processCSV = new ProcessCSV();
        private Statistics statistics = new Statistics();
        //---------------------------

        /// <summary>
        /// Cria as tabelas na BD
        /// </summary>
        internal void create_db_tables()
        {
            try 
	        {
                db.create_tables();
	        }
	        catch (Exception e)
	        {
		        throw(e);
	        }
        }

        /// <summary>
        /// Permite ir buscar os dados de um ano para a BD ao ficheiro CSV
        /// </summary>
        /// <param name="ano">Ano dos dados a ler</param>
        internal void get_rebides_Data(int year)
        {
            Debug.WriteLine("A iniciar o processamento dos dados do CSV do ano " + year);
            Debug.WriteLine("------------------------------");

            //Cria o nome do ficheiro segundo o ano
            string fileName = REBIDES_FILE_NAME + year + ".csv";
            Debug.WriteLine("Nome do ficheiro: " + fileName);

            //Chama o método para ir buscar os dados ao CSV
            //------------------------
           List<List <string>> lstData = processCSV.process_rebides_csv(fileName);

            Debug.WriteLine("Dados do CSV do ano " + year + " processados com sucesso!");
            Debug.WriteLine("------------------------------");

            //Envia os dados do CSV para serem processados e enviados para a BD
            //------------------------
            Debug.WriteLine("A iniciar o processamento dos dados do ano " + year + " para a BD");

            db.process_data(lstData, year);
        }

        /// <summary>
        /// Processa a estatistica dos docentes por categoria,
        /// estabelecimento e ano.
        /// </summary>
        internal void stat_doc_cat_estab_ano()
        {
            statistics.stat_doc_cat_estab_ano();
        }

        /// <summary>
        /// Processa a estatistica dos docentes por tipo de grau,
        /// estabelecimento e ano.
        /// </summary>
        internal void stat_tipo_grau_estab_ano()
        {
            statistics.stat_tipo_grau_estab_ano();
        }
    }
}
